package JavaCode.contest.weekly.n0_200.n145;

import java.util.*;

public class N1 {
    public int[] relativeSortArray(int[] arr1, int[] arr2) {
        Map<Integer,Integer> map=new HashMap<>();
        for (int i:arr1)
        {
            map.put(i,map.getOrDefault(i,0)+1);
        }
        List<Integer> pre=new ArrayList<>();
        List<Integer> next=new ArrayList<>();
        for (int i:arr2)
        {
            int cnt=map.get(i);
            for (int k=0;k<cnt;k++)
            {
                pre.add(i);
            }
            map.remove(i);
        }
        for (Map.Entry<Integer,Integer> e:map.entrySet())
        {
            for (int i=0;i<e.getValue();i++)
            {
                next.add(e.getKey());
            }
        }
        Collections.sort(next);
        int[] res=new int[arr1.length];
        int idx=0;
        for (int i:pre)
        {
            res[idx++]=i;
        }
        for (int i:next)
        {
            res[idx++]=i;
        }
        return res;
    }
}
/**
 * 给你两个数组，arr1 和 arr2，
 *
 * arr2 中的元素各不相同
 * arr2 中的每个元素都出现在 arr1 中
 * 对 arr1 中的元素进行排序，使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。
 *
 *
 *
 * 示例：
 *
 * 输入：arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
 * 输出：[2,2,2,1,4,3,3,9,6,7,19]
 *
 *
 * 提示：
 *
 * arr1.length, arr2.length <= 1000
 * 0 <= arr1[i], arr2[i] <= 1000
 * arr2 中的元素 arr2[i] 各不相同
 * arr2 中的每个元素 arr2[i] 都出现在 arr1 中
 */
